﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;

namespace PSE.Framework.Communication.Adapters.XmlHttp
{
    /// <summary>
    /// Classe com o path e a query string a ser utilizado pelos adapters de XmlHttp
    /// </summary>
    public class XmlHttpRequestParameter
    {
        /// <summary>
        /// Construtor padrão
        /// </summary>
        public XmlHttpRequestParameter()
        { 
        }

        /// <summary>
        /// Construtor que preenche Url
        /// </summary>
        /// <param name="url">Url de destino da requisição</param>
        public XmlHttpRequestParameter(Uri url)
            : this()
        {
            _url = url;
        }

        /// <summary>
        /// Construtor que preenche Url e Credentials
        /// </summary>
        /// <param name="url">Url de destino da requisição</param>
        /// <param name="credentials">Credenciais utilizadas para se autenticar no site</param>
        public XmlHttpRequestParameter(Uri url, ICredentials credentials)
            : this(url)
        {
            _credentials = credentials;
        }

        /// <summary>
        /// Construtor que preenche Url, Credentials e ProxyCredentials
        /// </summary>
        /// <param name="url">Url de destino da requisição</param>
        /// <param name="credentials">Credenciais utilizadas para se autenticar no site</param>
        /// <param name="proxyCredentials">Credenciais utilizadas para se autenticar no proxy</param>
        public XmlHttpRequestParameter(Uri url, ICredentials credentials, ICredentials proxyCredentials)
            : this(url, credentials)
        {
            _proxyCredentials = proxyCredentials;
        }

        private ICredentials _credentials = null;
        /// <summary>
        /// Credenciais utilizadas para se autenticar no site
        /// </summary>
        public ICredentials Credentials
        {
            get { return _credentials; }
            set { _credentials = value; }
        }

        private ICredentials _proxyCredentials = null;
        /// <summary>
        /// Credenciais utilizadas para se autenticar no proxy
        /// </summary>
        public ICredentials ProxyCredentials
        {
            get { return _proxyCredentials; }
            set { _proxyCredentials = value; }
        }

        private Uri _url = null;
        /// <summary>
        /// Url de destino da requisição
        /// </summary>
        public Uri Url
        {
            get { return _url; }
            set { _url = value; }
        }

        private Dictionary<string, object> _query = new Dictionary<string, object>();
        /// <summary>
        /// Query string na forma de chave valor
        /// </summary>
        public Dictionary<string, object> Query
        {
            get { return _query; }
        }
    }
}
